package cn.itrip.dao;


import cn.itrip.beans.pojo.ItripHotelOrder;
import cn.itrip.beans.pojo.ItripHotelRoom;
import cn.itrip.beans.pojo.ItripOrderLinkUser;
import cn.itrip.beans.vo.*;
import cn.itrip.beans.vo.tokentakevo.OrderAndLinkUserVo;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;


/**
 * <p>
 * 订单表 Mapper 接口
 * </p>
 *
 * @author 滕召伟
 * @since 2020-02-27
 */
@Mapper
public interface ItripHotelOrderMapper {
    /**
     * 全部订单
     *
     * @param itripHotelOrder
     * @return
     */
    List<ItripHotelOrder> listHotelOrder(ItripHotelOrder itripHotelOrder);

    /**
     * 订单详情
     *
     * @param orderId
     * @return
     */
    OrderRoomVo getOrderId(Long orderId);

    /**
     * 入住信息
     *
     * @param orderId
     * @return
     */
    OrderRoomHotelVO getOrderRommHtoId(Long orderId);

    /**
     * 获取房型ID
     *
     * @param hotelId
     * @param orderId
     * @return
     */
    ItripHotelRoom getHotelId(Long hotelId, Long orderId);

    /**
     * 获取订单和用户
     *
     * @param Id
     * @return
     */
    OrderLinkUserVo getOrderLinkUserVoId(Long Id);

    /**
     * 查询用户
     *
     * @param Id
     * @return
     */
    List<LinkUserAndNameVo> listLinkUserIdAndName(Long Id);

    /**
     * 查询房间信息
     *
     * @param itripHotelOrder
     * @return
     */
    StoreOrderRommHotelVo getHotelProductStoreDic(ItripHotelOrder itripHotelOrder);

    /**
     * 查询入住的房间信息
     *
     * @param itripHotelOrder
     * @return
     */
    int countItripHotelOrder(ItripHotelOrder itripHotelOrder);

    /**
     * 查询订单
     *
     * @param itripHotelOrder
     * @return
     */
    List<ItripHotelOrder> listItripHotelOrder(ItripHotelOrder itripHotelOrder);


    /**
     * 新增订单
     *
     * @param orderAndLinkUserVo
     * @return
     */
    void addHotelOrder(OrderAndLinkUserVo orderAndLinkUserVo);

    /**
     * 新增库存
     *
     * @param orderAndLinkUserVo
     */
    void addItripHotelTempStore(OrderAndLinkUserVo orderAndLinkUserVo);

    /**
     * 新增用户
     *
     * @param itripOrderLinkUser
     */
    void addItripOrderLinkUser(ItripOrderLinkUser itripOrderLinkUser);

    /**
     * 修改订单
     *
     * @param orderAndLinkUserVo
     */
    void updateHotelOrder(OrderAndLinkUserVo orderAndLinkUserVo);

    /**
     * 删除用户
     *
     * @param orderAndLinkUserVo
     */
    void deleteItripOrderLinkUser(OrderAndLinkUserVo orderAndLinkUserVo);

    /**
     * 获取金额
     *
     * @param orderAndLinkUserVo
     * @return
     */
    int countPayAmount(OrderAndLinkUserVo orderAndLinkUserVo);

    /**
     * 查询订单
     *
     * @param orderNo
     * @return
     */
    ItripHotelOrder getItripHotelOrder(String orderNo);

    /**
     * 查询超过两个小时未支付的订单
     *
     * @return
     */
    List<ItripHotelOrder> listTimedTask();

    /**
     * 修改两个小时之后待支付订单为已取消
     *
     * @param id
     */
    void updateTimedTask(Long id);

    /**
     * 修改两个小时之后待支付订单为已取消然后修改库存
     *
     * @param itripHotelOrder
     */
    void updateRepertory(ItripHotelOrder itripHotelOrder);

    /**
     * 回退酒店房间
     *
     * @param itripHotelOrder
     * @return
     */
    int getStore(ItripHotelOrder itripHotelOrder);

    /**
     * 查询待支付订单中 退房时间已到期的改为已消费
     * @return
     */
    List<ItripHotelOrder> listOrder();

    /**
     * 修改订单将待支付订单改成以消费
     * @param itripHotelOrder
     */
    void updateOrderStatus(ItripHotelOrder itripHotelOrder);
}
